package Template2;


public abstract class DrinkTemplate {

    /**抽象基类
     *
     * 制作饮料方法模板
     * 4个步骤    1、烧水 2、冲泡饮料 3、把饮料倒入杯中 4、加调料
     * 由于步骤1、3是通用的步骤，适合于制作任何饮料，所以可以把它写死
     * 2和4步骤，针对不同的饮料有不同的选择，所以可以把它延迟到子类去复写实现（注意访问修饰符）
     */
    public final void drinkTempLate(){
        boilWater();//烧水
        brew();//冲泡饮料
        pourInCup();//把饮料倒入杯中
        addCondiments();//加调料
    }

    private void pourInCup() {
        System.out.println("把饮料倒入杯中...");
    }

    private void boilWater() {
        System.out.println("烧水步骤进行中...");
    }

    protected abstract void addCondiments();//加调料，由于饮料所加调料各不相同，所以可以延迟到子类实现

    protected abstract void brew();//冲泡饮料 ，由于饮料所用的材料各不相同，所以可以延迟到子类实现
}